android 无法驱动 android驱动存放位置 |
您所在的位置:网站首页 › generic sdio device驱动下载 › android 无法驱动 android驱动存放位置 |
一、我们编写的内核驱动模块testdev.o,通过内核编译后,被编译打包进kernel/goldfish/arch/arm/boot/zImage中。 二、android系统编译输出目录out/target/product/generic说明 内含三个主要目录: root:打包成 ramdisk.img镜像文件,安装到实际系统后,是系统的根目录root data:打包成userdata.img镜像文件,安装到实际系统后,是根目录下的data目录:root/data system:打包成system.img镜像文件,安装到实际系统后,是根目录下的system目录:root/system android系统根目录下文件目录说明: mnt:挂载点目录 etc:系统主要配置文件 sys:Linux内核文件 proc:运行时文件 init.rc:启动脚本 default.prop:系统属性配置文件 data:用户程序目录 dev:设备文件 system:android系统文件 三、system系统目录文件夹说明: app:这个里面主要存放的是常规下载的应用程序,可以看到都是以APK格式结尾的文件。在这个文件夹下的程序为系统默认的组件,自己安装的软件将不会出现在这里,而是\data\文件夹中,我们编写的系统级应用程序:TestDev.apk测试程序就在这里。 bin:系统工具,比如 ps/cp/pm 等,系统的本地程序,一般是C语言的,我们编写的系统级的C语言测试程序test在这里。 etc:系统的配置文件,比如APN接入点设置等核心配置等。 fonts:系统字体目录。 media:媒体文件目录 build.prop :Android 系统属性配置文件 tts: usr:用户文件夹,包含共享、键盘布局、时间区域文件 vendor:厂商定制目录 xbin:常用开发工具,比如 tcpdump/sqlite3 等 lib:系统底层库,如平台运行时库等,我们编写的HAL层的库test.default.so,在system/lib/hw目录中;我们添加了JNI内容的运行库层库的libandroid_servers.so就在这里 framework:系统API,从后缀名为jar可以看出是系统平台框架,应用框架层,我们添加了内容的services.jar包就在这里 \system\framework\am.jar \system\framework\android.awt.jar AWT库 \system\framework\android.policy.jar \system\framework\android.test.runner.jar \system\framework\com.google.android.gtalkservice.jar GTalk服务 \system\framework\com.google.android.maps.jar 电子地图库 \system\framework\core.jar 核心库,启动桌面时首先加载这个 \system\framework\ext.jar \system\framework\framework-tests.jar \system\framework\framework.jar \system\framework\input.jar 输入库 \system\framework\itr.jar \system\framework\monkey.jar \system\framework\pm.jar 包管理库 \system\framework\services.jar \system\framework\ssltest.jar \system\framework\svc.jar 系统服务 四、架构、目录、测试程序对应关系: 应用层-----------app-------------TestDev.apk 应用框架层-----framework---包含了设备服务的services.jar 应用框架层JNI库-----lib---------------添加了设备JNI内容的库的libandroid_servers.so 硬件抽象层-----lib/hw----------HAL层的库test.default.so 内核层------内核驱动模块testdev.o被编译打包进kernel/goldfish/arch/arm/boot/zImage中 注:没有运行库层,通过应用框架层JNI库直接调用HAL的库 五、实现流程 1、应用层程序TestDev.apk,通过服务管理器获取test服务(ServiceManager.getService("test")),然后通过服务获取它提供的接口ITestService,通过接口可以调用应用框架层接口函数:getVal、setVal; 2、应用框架层services.jar: 声明其要调用的jni函数:native init_native(); native setVal_native(int val); native getVal_native(); libandroid_servers.so:由系统自动加载,我们编写的设备jni方法通过方法表已向系统注册 jni对应的方法test_init、test_setVal、test_getVal 3、应用框架层JNI库libandroid_servers.so: 根据硬件抽象层的设备模块ID(TEST_HARDWARE_MODULE_ID),用hw_get_module,获取硬件抽象层的设备模块,进而获取HAL设备test_device_t test_init、test_setVal、test_getVal,通过这个设备,调用硬件抽象层的函数:test_device->set_val、get_val 4、硬件抽象层test.default.so: test_device_t,调用内核系统函数open,打开设备,dev->fd = open(“/dev/testdev”, O_RDWR) 调用系统内核函数 read(dev->fd)、write(dev->fd),实现读写 5、内核驱动层直接打包进zImage: 根据linux驱动编写标准,向系统提供read、write等函数,并实现该函数的操作 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |